//package com.dataseek.iot.mqtt.demo.impl;
//
//import com.dataseek.iot.mqtt.demo.IMQTTConnector;
//import lombok.NonNull;
//import lombok.extern.slf4j.Slf4j;
//import org.eclipse.paho.client.mqttv3.*;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//
//import java.nio.charset.StandardCharsets;
//
///**
// * @author cc
// * @Title: MQTT连接配置
// * @Description: MQTT连接配置
// * @date 2021/8/272:32 下午
// * @since 1.0
// */
//@Slf4j
//@Component
//public class MQTTConnector extends IMQTTConnector {
//
//    @Value("${mqtt.brokerUrl}")
//    private String url;
//
//    @Value("${mqtt.publisher.defaultTopic}")
//    private String publisherTopic;
//
//    @Value("${mqtt.subscriber.defaultTopic}")
//    private String subscriberTopic;
//
//    @Value("${mqtt.username}")
//    private String username;
//
//    @Value("${mqtt.password}")
//    private String password;
//
//    private MqttClient client;
//
//    private final String clientId = "Client" + (int) (Math.random() * 100000000);
//
////
////    public MQTTConnector() throws MqttException {
////        this.client = new MqttClient(getMQTT_URL(), getCLIENT_ID(), new MemoryPersistence());
////    }
//
//
//
//    /**
//     * 设置mqtt客户端
//     * @param username
//     * @param password
//     * @param callback
//     */
//    public void setMqttClient(@NonNull String username, @NonNull String password, MqttCallback callback) throws MqttException {
//        client = new MqttClient(url, clientId);
//        MqttConnectOptions options = mqttConnectOptions(username, password);
//        client.setCallback(callback);
//        client.connect(options);
//    }
//
//    /**
//     * MQTT连接参数设置
//     * @param username
//     * @param password
//     * @return
//     * @throws MqttException
//     */
//    private MqttConnectOptions mqttConnectOptions(String username, String password) throws MqttException {
//        MqttConnectOptions options = new MqttConnectOptions();
//        if(username!=null&&!username.isEmpty()){
//            options.setUserName(username);
//        }
//        if(password!=null&&!password.isEmpty()){
//            options.setPassword(password.toCharArray());
//        }
//        options.setConnectionTimeout(10);
//        options.setAutomaticReconnect(true);
//        options.setCleanSession(true);
//        return options;
//    }
//
//    /**
//     * 关闭MQTT连接
//     */
//    public void close(){
//        try {
//            client.close();
//            client.disconnect();
//        } catch (MqttException e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 向默认主题发送消息
//     * @param msg
//     * @throws MqttException
//     */
//    public void pub(String msg) throws MqttException {
//        MqttMessage message = new MqttMessage();
//        message.setPayload(msg.getBytes(StandardCharsets.UTF_8));
//        MqttTopic mqttTopic = client.getTopic(publisherTopic);
//        MqttDeliveryToken token = mqttTopic.publish(message);
//        token.waitForCompletion();
//    }
//
//    /**
//     * 向某个主题发布消息 默认qos:1
//     * @param topic
//     * @param msg
//     * @throws MqttException
//     */
//    public void pub(String topic, String msg) throws MqttException {
//        MqttMessage message = new MqttMessage();
//        message.setPayload(msg.getBytes(StandardCharsets.UTF_8));
//        MqttTopic mqttTopic = client.getTopic(topic);
//        MqttDeliveryToken token = mqttTopic.publish(message);
//        token.waitForCompletion();
//    }
//
//    /**
//     * 向某个主题发布消息，自定义qos
//     * @param topic
//     * @param msg
//     * @param qos 消息质量 Qos: 0、1、2
//     * @throws MqttException
//     */
//    public void pub(String topic, String msg, int qos) throws MqttException {
//        MqttMessage mqttMessage = new MqttMessage();
//        mqttMessage.setQos(qos);
//        mqttMessage.setPayload(msg.getBytes());
//        MqttTopic mqttTopic = client.getTopic(topic);
//        MqttDeliveryToken token = mqttTopic.publish(mqttMessage);
//        token.waitForCompletion();
//    }
//
//    /**
//     * 订阅默认主题消息
//     * @throws MqttException
//     */
//    public void sub() throws MqttException {
//        client.subscribe(subscriberTopic);
//    }
//    /**
//     * 订阅消息
//     * @param topic
//     * @throws MqttException
//     */
//    public void sub(String topic) throws MqttException {
//        client.subscribe(topic);
//    }
//
//    /**
//     * 订阅多主题
//     * @param topics
//     * @throws MqttException
//     */
//    public void sub(String... topics) throws MqttException {
//        client.subscribe(topics);
//    }
//
//
//}
